6669d2f78ffe878b8cd28b7bd2f641a87949bbc0,src/com/mxgraph/layout/hierarchical/stage/mxCoordinateAssignment.java,mxCoordinateAssignment,setEdgePosition,#mxGraphAbstractHierarchyCell#,1489

Before Change


				if (jettys != null)
				{
					int arrayOffset = edge.isReversed() ? 2 : 0;
					double y = edge.isReversed() ? rankTopY[minRank] : rankBottomY[maxRank];
					double jetty = jettys[parallelEdgeCount * 4 + 1 + arrayOffset];
					
					if (edge.isReversed())

After Change


	 */
	protected void setEdgePosition(mxGraphAbstractHierarchyCell cell)
	{
		mxGraphHierarchyEdge edge = (mxGraphHierarchyEdge) cell;

		// For parallel edges we need to separate out the points a
		// little
		double offsetX = 0.0;

		// Only set the edge control points once
		if (edge.temp[0] != 101207)
		{
			int maxRank = edge.maxRank;
			int minRank = edge.minRank;
			
			if (maxRank == minRank)
			{
				maxRank = edge.source.maxRank;
				minRank = edge.target.minRank;
			}

			Iterator<Object> parallelEdges = edge.edges.iterator();
			int parallelEdgeCount = 0;
			double[] jettys = jettyPositions.get(edge);
			
			Object source = edge.source.cell;

			while (parallelEdges.hasNext())
			{
				Object realEdge = parallelEdges.next();
				Object realSource = layout.getGraph().getView().getVisibleTerminal(realEdge, true);
				
				List<mxPoint> newPoints = new ArrayList<mxPoint>(edge.x.length);

				// Single length reversed edges end up with the jettys in the wrong
				// places. Since single length edges only have jettys, not segment
				// control points, we just say the edge isn't reversed in this section
				boolean reversed = edge.isReversed();
				
				if (realSource != source)
				{